package com.lin.carbon.config;

import com.lin.carbon.interceptor.JwtInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * WebMvcConfig 类是一个 Spring 配置类，用于配置 Spring MVC 的相关设置。
 * 该类实现了 WebMvcConfigurer 接口，可对 Spring MVC 的拦截器、视图解析器等进行自定义配置。
 * 此处主要用于配置 JWT 拦截器，确保特定接口的访问需要经过 JWT 验证。
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    /**
     * 注入 JwtInterceptor 实例，该拦截器用于验证请求中的 JWT 令牌。
     * 通过 Spring 的依赖注入机制，将 JwtInterceptor 实例注入到当前配置类中。
     */
    @Autowired
    private JwtInterceptor jwtInterceptor;

    /**
     * 重写 WebMvcConfigurer 接口的 addInterceptors 方法，用于注册拦截器。
     * 可以在此方法中添加多个拦截器，并配置它们的拦截路径和排除路径。
     *
     * @param registry 拦截器注册器，用于注册和配置拦截器。
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 向拦截器注册器中添加 JwtInterceptor 拦截器
        registry.addInterceptor(jwtInterceptor)
                // 配置排除拦截的路径，这里排除了登录接口 "/login"，即该接口不需要进行 JWT 验证

               .excludePathPatterns("/login", "/carbon/logout")
               // 配置需要拦截的路径，"**" 表示匹配所有路径，即除了排除的接口外，其他所有接口都需要进行 JWT 验证
                .addPathPatterns("/**");
    }
}